package com.cskaoyan.javase.oop2._2polymorphic._2advantage;

/**
 * instanceof关键字
 * instanceof关键字的语法:
 *      引用名 instanceof 类名
 * 用于判断引用所指向的对象,是否是后面类名的对象或者子类对象
 * 如果是,该结构会返回true,表示这个引用可以强转成后面类名的引用
 * 如果不是,该结构会返回false,表示这个引用不可以强转成后面类名的引用
 * 这个结构常常配合if去使用
 *
 * 特殊的:
 *      如果null instanceof 任何类
 *      结果都是false
 *
 *
 * 总结:
 * 引用数据类型要成功"向下转型"，完成强转条件是很苛刻的，实际开发中，先慎重考虑是否真的需要强转。然后在做强转之前，也需要使用instanceof关键字判断，保障安全性。麻痹大意，导致抛出ClassCastException异常，就会很难受了。
 *
 *
 * @since 11:24
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo4 {
    public static void main(String[] args) {
        Phone p = new IPhone();
        System.out.println(p instanceof IPhone);
        IPhone p1 = (IPhone) p;
        System.out.println(p instanceof IPhone13);
        Phone p2 = new IPhone13();
        System.out.println(p2 instanceof IPhone);
        IPhone p21 = (IPhone) p2;

        Phone p3 = null;
        System.out.println(p3 instanceof Phone);
    }
}

class Phone {
}

class IPhone extends Phone {
}

class IPhone13 extends IPhone {
}